package error_admin

import (
	"github.com/gin-gonic/gin"
	"net/http"
)

// 定义一个错误结构体， 统一管理程序错误  程序自定义错误
type ErrCode struct {
	Code    int
	Message string
}

func (e ErrCode) Error() string {
	return e.Message
}

// 解析错误的函数   --- 错误标准化返回
// 没错误返回OK， 有错误返回对应的错误  未知错误返回InternalServerError
func DecodeErr(err error) (int, string) {
	if err == nil {
		return OK.Code, OK.Message
	}
	//type  -- switch
	switch typed := err.(type) {
	case *ErrCode:
		return typed.Code, typed.Message
	default:
		return ServerError.Code, ServerError.Message
	}
}

// 定义数据标准化返回格式
type Response struct {
	Code    int         `json:"code"`
	Message string      `json:"message"`
	Data    interface{} `json:"data"`
}

// 定义标准化返回函数  -- 加上错误解析  -做错误统一管理以及标准化返回
func SendRsp(c *gin.Context, err error, data interface{}) {
	code, message := DecodeErr(err)
	//定义返回数据
	rsp := Response{
		Code:    code,
		Message: message,
		Data:    data,
	}
	//将rsp结构体以及要返回的数据库对象 转化成json格式
	//数据序列化  将查询到的数据库对象按照json标签，转化成json格式返回
	c.JSON(http.StatusOK, rsp)
}
